
package com.xg.gaud.utils;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

import java.util.stream.Collectors;

/**
 * JSON 工具类
 * 提供安全访问 JSON 字段的方法
 */
public class JsonUtils {

    /**
     * 安全获取字符串（支持字段为 String 或 Array）
     */
    public static String safeGetString(JsonObject obj, String key) {
        if (obj == null || !obj.has(key)) {return "";}
        JsonElement element = obj.get(key);
        if (element.isJsonNull()) {return "";}
        if (element.isJsonPrimitive()) {return element.getAsString();}
        return "";
    }

    /**
     * 安全获取字符串数组字段，并拼接为字符串
     */
    public static String safeGetStringFromArray(JsonObject obj, String key) {
        if (obj == null || !obj.has(key)) {return "";}
        JsonElement element = obj.get(key);
        if (element.isJsonNull()) {return "";}
        if (element.isJsonPrimitive()) {return element.getAsString();}
        if (element.isJsonArray()) {
            return joinJsonArray(element.getAsJsonArray(), "; ");
        }
        return "";
    }

    /**
     * 将 JsonArray 转换为指定分隔符的字符串
     */
    public static String joinJsonArray(JsonArray array, String delimiter) {
        if (array == null || array.size() == 0) {return "";}
        return array.asList().stream()
                .map(JsonElement::getAsString)
                .collect(Collectors.joining(delimiter));
    }

    /**
     * 安全获取 JsonObject 字段
     */
    public static JsonObject safeGetObject(JsonObject obj, String key) {
        if (obj == null || !obj.has(key)) {return new JsonObject();}
        JsonElement element = obj.get(key);
        return element.isJsonObject() ? element.getAsJsonObject() : new JsonObject();
    }

    /**
     * 安全获取 JsonArray 字段
     */
    public static JsonArray safeGetArray(JsonObject obj, String key) {
        if (obj == null || !obj.has(key)) {return new JsonArray();}
        JsonElement element = obj.get(key);
        return element.isJsonArray() ? element.getAsJsonArray() : new JsonArray();
    }

    /**
     * 检查字段是否存在且不为空
     */
    public static boolean hasValid(JsonObject obj, String key) {
        return obj != null && obj.has(key) && !obj.get(key).isJsonNull();
    }
}